/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dp1.pucp.Ventas.DAO;

import com.dp1.pucp.Modelo.Clases.Precio;
import com.dp1.pucp.Modelo.Clases.Moneda;
import com.dp1.pucp.Modelo.Clases.Tipoproducto;
import com.dp1.pucp.Util.HibernateUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author ubuntu64
 */
public class PrecioDAO {
        
    public ArrayList<String> listarVigencias() 
    {
        ArrayList<String> estados = new ArrayList<>();
        estados.add("--Seleccione--");
        estados.add("Inactivo");
        estados.add("Activo");
        return estados;
    }
    
    public ArrayList<Moneda> listarMonedas(){
        ArrayList<Moneda> listaMonedas = new ArrayList<>();
         Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Moneda where idmoneda = 1 order by idmoneda").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) { 
                Moneda m = (Moneda) iter.next();
                Hibernate.initialize(m.getIdmoneda());
                Hibernate.initialize(m.getNombre());
                listaMonedas.add(m);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaMonedas;
        }   
    }
    
    
        public ArrayList<Tipoproducto> listarProductos(){
        ArrayList<Tipoproducto> listaproductos = new ArrayList<>();
         Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from Tipoproducto where tipo = 'PF' order by idtipoproducto").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) { 
                Tipoproducto m = (Tipoproducto) iter.next();
                Hibernate.initialize(m.getIdtipoproducto());
                Hibernate.initialize(m.getNombre());
                           
                listaproductos.add(m);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaproductos;
        }   
    }
        
           public void guardarPrecio(Precio precio){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            session.saveOrUpdate(precio);
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }        
    }
           
           public ArrayList<Precio> listarPrecios(int estado){
    ArrayList<Precio> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            Date hoy = new Date();
            List lista;
            
            if(estado==0){ //activo
                lista= session.createQuery("from Precio order by idprecio").list();
            }
            else{
                if (estado==1) { //inactivo
                     lista = session.createQuery("from Precio where fechainicio>'"+hoy.toString()+"' or fechafin<'"+hoy.toString()+"'").list();
                }else{
                     lista = session.createQuery("from Precio where fechainicio<'"+hoy.toString()+"' and fechafin>'"+hoy.toString()+"'").list();
                }
                
                
            }
              
            Iterator iter = lista.iterator();
            while (iter.hasNext()) { 
                Precio c = (Precio) iter.next();
                Hibernate.initialize(c.getIdprecio());
                Hibernate.initialize(c.getPrecio());
                Hibernate.initialize(c.getFechainicio());
                Hibernate.initialize(c.getFechafin());
                Hibernate.initialize(c.getMoneda());
                Hibernate.initialize(c.getMoneda().getIdmoneda());
                Hibernate.initialize(c.getMoneda().getNombre());
                Hibernate.initialize(c.getTipoproducto());
                Hibernate.initialize(c.getTipoproducto().getIdtipoproducto());
                Hibernate.initialize(c.getTipoproducto().getNombre());
                Hibernate.initialize(c.getTipoproducto().getTipo());
                               
                
                listaResultados.add(c);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }    
    
}
